package com.dayuanit.dy15.lesson27.demo1;

public class Animal {

    private String name = "animal";

    {
        System.out.println("Animal {}");
    }
    public Animal() {
        System.out.println("Animal()");
    }

    public void move() {
        System.out.println("animal move()");
    }

    public static void eat() {
        System.out.println("Animal eat()");
    }

    //Animal中内部类
    public class Dog {
        private String name = "Dog";
//        public static int price = 900;//error 非静态内部类不能定义静态的属性或者方法
        public void run() {
            System.out.println("Dog run() " + name + ",外部类name=" + Animal.this.name);
            //访问外部类的非静态方法
            move();// dog move
            Animal.this.move();//animal move
            eat();
        }

        //error  非静态内部类不能定义静态的属性或者方法
//        public static void eat() {
//
//        }

        public void move() {
            System.out.println("Dog move");
        }
    }

    public static class Fish {

        public void run() {
            System.out.println("fish run()");
//            move(); //error 静态内部类不能访问外部类的实例方法或者属性
            eat();//fish eat
            Animal.eat();//Animal eat
        }

        public static void eat() {
            System.out.println("fish eat()");
        }
    }

}

//Cat不是内部类 仅仅是一个源文件中，可以定义多个类，但是只有一个public修饰的类。并且public的类名和源文件名保持一致。
class Cat {

}
